package com.cencat.common.annotation;

import java.lang.annotation.*;

/**
 * 操作日志注解
 * 用于记录用户操作日志
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface OperationLog {
    
    /**
     * 操作描述
     * @return 操作描述
     */
    String value() default "";
    
    /**
     * 操作类型
     * @return 操作类型
     */
    OperationType type() default OperationType.QUERY;
    
    /**
     * 是否记录参数
     * @return 是否记录参数
     */
    boolean logParams() default true;
    
    /**
     * 是否记录结果
     * @return 是否记录结果
     */
    boolean logResult() default false;
    
    /**
     * 是否记录异常
     * @return 是否记录异常
     */
    boolean logException() default true;
    
    /**
     * 操作类型枚举
     */
    enum OperationType {
        /**
         * 查询操作
         */
        QUERY("查询"),
        
        /**
         * 新增操作
         */
        CREATE("新增"),
        
        /**
         * 修改操作
         */
        UPDATE("修改"),
        
        /**
         * 删除操作
         */
        DELETE("删除"),
        
        /**
         * 导入操作
         */
        IMPORT("导入"),
        
        /**
         * 导出操作
         */
        EXPORT("导出"),
        
        /**
         * 登录操作
         */
        LOGIN("登录"),
        
        /**
         * 登出操作
         */
        LOGOUT("登出"),
        
        /**
         * 其他操作
         */
        OTHER("其他");
        
        private final String description;
        
        OperationType(String description) {
            this.description = description;
        }
        
        public String getDescription() {
            return description;
        }
    }
}